Over recent years, there has been a growth in interest in disk drive arrays for storing large amounts of data in a computer system. A disk array typically consists of a number of disk drives connectable to a using system via one or more controller elements which control the transfer of data to and from the disk drives. A disk array is designed to provide high capacity data storage, high reliability and high data transfer rates to and from the using system.
One widely adopted scheme for array architectures is known as RAID (Redundant Arrays of Independent Disks). Details of RAID can be found in a number of publications including a paper entitled `A Case for Redundant Arrays of Independent disks (RAID)` (ACM SIGMOD conference proceedings, Chicago, Ill., Jun. 1-3, 1988, pp.109-116). In this paper five levels of array (RAIDS 1 to 5) are proposed to provide different levels of data management. Each of the RAID levels permits users to increase their data storage capacity by linking together a number of inexpensive disk drives. The RAID system provides protection against loss of data through the failure of a drive by either storing two copies of the data on two drives (RAID 1) or by spreading the data across two or more drives of the array, calculating the parity for the striped data and storing the parity data on a different drive. In the event that one of the data holding drives fails, the data on the failed drive can be reconstructed using the parity data and the remaining data of the parity group (RAIDs 2 to 5). Arrays are often referred to as `N+P` where there are N data disks and P parity disks. In RAID 3, for example, the data is bit or byte-striped across the disks with the parity data being stored on a single parity disk. For RAID 3 therefore, P is equal to one. A parity group consists of the group of data on the N disks and the parity data on the P disk.
When data is stored to disk in RAID 3, parity is generated by carrying out an XOR operation on the data being stored. The parity so generated is stored to a separate disk. A logical data record is broken up and interleaved across the disks with parity stored on a separate disk. All disks are accessed concurrently for a user application access. If data stored in the array is required to be updated, then the parity data for the parity group containing that data also needs to be updated. Parity generation may be implemented in software or alternatively in the form of XOR hardware. Hardware implementation generally allows for more rapid generation of parity as data is written from the host system to the array. One example of such an implementation is described in European patent EP 508 604.